# @Time : 2020/6/28 9:58
# @Author : Fioman 
# @Phone : 13149920693
"""
装饰器是可调用的对象,其参数是另外一个函数(被装饰的函数).装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或者可调用对象.
"""

# 假如有一个装饰器
def decorate(func):
    pass

@decorate
def target():
    print("running target()")

# 上述代码的效果与下述写法一样:
# def target():
#     print("running target()")
# target = decorate(target)
# 装饰器的本质就是上述两行代码,其实就是将原函数带入到装饰器函数,然后装饰器函数里又一个闭包函数.
# 实际上就是用闭包函数替换了原函数.

def deco(func):
    def inner():
        print("running inner()")
    return inner

@deco
def target():
    print("running target()")


t = target()
print(target)
# 严格来说,装饰器只是语法糖.如前所示,装饰器可以像常规的可调用对象那样调用,其参数是另一个函数.有时,这样做更方便,尤其
# 是左元编程(在运行时改变程序的行为)时.
























